package com.darren.euc.util;

import com.alibaba.fastjson.JSON;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
 * Created by hanji on 2018/4/8.
 */
public class UpoadFileUtils {
    private static String temp = "//tmp//temp_pic//";
//    private static String temp = "c:\\temp\\";
    /***
     * 上传文件通用方法，返回json集合
     * @param request
     * @param path
     * @return
     * @throws Exception
     */
    public static String uploadFile(HttpServletRequest request, String path){
        Map<String,String> map = new HashMap<String,String>();
        int max_file_size = 1024 * 1024 * 1024; // 1024M=1G
        File tmpFile = new File(temp);
        if (!tmpFile.exists()) {
            // 创建临时目录
            tmpFile.mkdir();
        }
        try {
            // 3、判断提交上来的数据是否是上传表单的数据
            if (!ServletFileUpload.isMultipartContent(request)) {
                // 按照传统方式获取数据
                return "{\"error_code\":404,\"data\":\"没有需要上传的文件\"}";
            }
            MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
            Iterator<String> iter = multipartRequest.getFileNames();
            while (iter.hasNext()) {
                MultipartFile mf = multipartRequest.getFile(iter.next());
                if(!mf.isEmpty()){
                    if (mf.getSize() > max_file_size)
                        return "{\"error_code\":500,\"data\":\"上传文件不得大于1G\"}";
                    // 得到上传的文件名称，
                    String filename = mf.getOriginalFilename();
                    if (filename == null || filename.trim().equals("")) {
                        continue;
                    }
                    // 处理获取到的上传文件的文件名的路径部分，只保留文件名部分
                    filename = filename.substring(filename.lastIndexOf("\\") + 1);
                    // 获取item中的上传文件的输入流
                    InputStream in = mf.getInputStream();

                    File file = new File(path);
                    // 如果目录不存在
                    if (!file.exists()) {
                        // 创建目录
                        file.mkdirs();
                    }

                    // 创建一个文件输出流
                    FileOutputStream out = new FileOutputStream(path + File.separator + filename);
                    // 创建一个缓冲区
                    byte buffer[] = new byte[1024];
                    // 判断输入流中的数据是否已经读完的标识
                    int len = 0;
                    // 循环将输入流读入到缓冲区当中，(len=in.read(buffer))>0就表示in里面还有数据
                    while ((len = in.read(buffer)) > 0) {
                        out.write(buffer, 0, len);
                    }
                    // 关闭输入流
                    in.close();
                    // 关闭输出流
                    out.close();

                    map.put(mf.getName(),(path + File.separator + filename).replaceAll("\\\\","/"));
                }
            }
        }catch (Exception e) {
            e.printStackTrace();
            return "{\"error_code\":500,\"data\":\"文件上传失败！\"}";
        }
        if(map.size() == 0){
            return "{\"error_code\":404,\"data\":\"没有需要上传的文件\"}";
        }
        return "{\"error_code\":200,\"data\":"+ JSON.toJSONString(map)+"}";
    }
}
